Mapping Request

Descripcion

Como gestionar desde Spring las distintas solicitudes que se pueden recibir en la aplicacion:

Proyecto de ejemplo
Api-Rest-Example.zip
Descripcion

@RestController

Para realizar un RequestMapping lo primero que tenemos que hacer es indicar en nuetra clase la anotacion @RestController y a mayores tambien tenemos que importar la propia anotacion.

Importamos la anotacion de Sping:

import org.springframework.web.bind.annotation.RestController;
                

AƱadimos la anotacion @RestController a la clase:

@RestController
public class ControladorPrueba {


}

@RequestMapping

A continuacion podemos asignar cualquiera solicitud (GET, POST...etc) usando la anotacion @RequestMapping, esta anotacion en principio se pone antes de una funcion para asignar esa funcion a una request concreta, aunque en realidad es mas comodo usar las anotaciones directas para cada solicitud, pero para que quede documentada esta manera tambien.

Primero importamos las anotaciones del framework de Spring:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

NOTA: Realizamos dos importaciones una es la del RequestMapping y la otra es la de los parametros que le pasaremos a la propia anotacion RequestMethod

Ejemplo:

@RequestMapping(value = "/getRequest", method = RequestMethod.GET)
public String getRequest(){
    return "GET Request Succesfull";
}

Podemos usar otros metodos como:

RequestMethod.POST
RequestMethod.PUT

@GetMapping

Podemos usar esta anotacion para asociar una funcion con una solicitud GET, en vez de usar el RequestMapping con el parametro RequestMethod.GET

Primero necesitamos importar la siguiente libreria:

import org.springframework.web.bind.annotation.GetMapping;

Ejemplo de codigo:

@GetMapping("/getRequest")
public String getRequest(){
    return "GET Request Succesfull";
}

@PostMapping

Podemos usar esta anotacion para asociar una funcion con una solicitud POST, en vez de usar el RequestMapping con el parametro RequestMethod.POST

Primero necesitamos importar la siguiente libreria:

import org.springframework.web.bind.annotation.PostMapping;

Ejemplo de codigo:

@PostMapping("/postRequest")
public String postRequest(){
    return "POST Request Succesfull";
}

@PutMapping

Podemos usar esta anotacion para asociar una funcion con una solicitud PUT, en vez de usar el RequestMapping con el parametro RequestMethod.PUT

Primero necesitamos importar la siguiente libreria:

import org.springframework.web.bind.annotation.PutMapping;

Ejemplo de codigo:

@PutMapping("/putRequest")
public String putRequest(){
    return "PUT Request Succesfull";
}
Base Paths

El @RequestMapping podemos utilizarlo antes de la clase (En vez de antes de la funcion) para indicar un nombre base para todas las rutas posteriores de los endpoint que queramos asignar

@RestController
@RequestMapping("/base")
public class RequestController {

    @GetMapping("/getRequest")
    public String getRequest(){
        return "GET Request Succesfull";
    }

En este caso el endpoint seria /base/getRequest y todos los endpoint que definamos dentro de la clase tendran como ruta base /base mas lo que se indique a mayores en el endpoint que asignemos a un metodo.

Request Parameters

Cuando hacemos una peticion GET podemos pasar parametros a traves de la url y capturarlos en el metodo GET que definamos en el endpoint.

Un ejemplo de url con parametros seria el siguiente

http://127.0.0.1:8080/base/getRequest?message=hola

Despues de la ruta del endpoint ponemos ? y a continuacion los parametros con el formato clave=valor si queremos enviar varios parametros deberan de ir separados entre ellos por el caracter &

Y desde el codigo lo manejariamos usando la anotacion @RequestParam dentro de los parametros de la funcion

Antes de nada tenemos que importar:

import org.springframework.web.bind.annotation.RequestParam;

Codigo ejemplo:

@GetMapping("/getRequest")
public String getRequest(@RequestParam String message){
    return "GET Request Succesfull, message: " + message;
}
Path Variables

En vez de usar parametros http en la URL podemos usar PATH variables, que son variables introducidas dentro de la URL (parecido a los parametros pero algo diferente), ejemplos: /getRequest/{nombre}/persona /getRequest/persona/{nombre}

En este caso nombre seria la Path Variable, se puede colocar en cualquier sitio de la url, ya sea en el medio o al final del todo.

Primero importamos:

import org.springframework.web.bind.annotation.PathVariable;

Ejemplo de codigo:

@GetMapping("/getRequest/{nombre}/persona")
    public String getRequestPath(@PathVariable String nombre){
        return "GET Request Succesfull, Persona: " + nombre;
    }
Request Body POST

En el caso de que queramos obtener los datos a traves de una solicitud POST con la informacion en el body y no en la URL lo hariamos usando la anotacion @ResponseBody de la siguiente manera:

Primero importamos:

import org.springframework.web.bind.annotation.RequestBody;

Despues necesitamos crear un objeto en el que se mapeara toda la informacion que recibamos en el cuerpo de la peticion, en este caso incluiremos dos mensajes

Objeto:

public class Messages {
    private String message1;
    private String message2;

    public String getMessage1() {
        return message1;
    }
    public void setMessage1(String message1) {
        this.message1 = message1;
    }
    public String getMessage2() {
        return message2;
    }
    public void setMessage2(String message2) {
        this.message2 = message2;
    }
}

El metodo para gestionar la solicitud POST:

@PostMapping("/postRequest")
    public String postRequest(@RequestBody Messages messages){
        return "POST Request Succesfull " + messages.getMessage1() + messages.getMessage2();
    }

Para hacer la solicitud POST podemos usar el Postman:

Tags

Spring | Configuracion inicial